package main

import (
	"log"
	"time"

	"github.com/streadway/amqp"
)

func main2() {
	// 1. 连接 RabbitMQ
	conn, err := amqp.Dial("amqp://admin:admin123@localhost:5672/")
	if err != nil {
		log.Fatalf("连接失败: %v", err)
	}
	defer conn.Close()

	// 2. 创建通道
	ch, err := conn.Channel()
	if err != nil {
		log.Fatalf("通道创建失败: %v", err)
	}
	defer ch.Close()

	// 3. 声明队列（与生产者一致）
	q, err := ch.QueueDeclare(
		"task_queue", // 队列名
		true,         // 持久化
		false,        // 自动删除
		false,        // 排他性
		false,        // 非阻塞
		nil,
	)
	if err != nil {
		log.Fatalf("队列声明失败: %v", err)
	}

	// 4. 设置预取计数（提升并发性能）
	err = ch.Qos(
		1,     // 每个消费者预取消息数
		0,     // 预取字节大小
		false, // 全局模式
	)
	if err != nil {
		log.Fatalf("QoS设置失败: %v", err)
	}

	// 5. 消费消息
	msgs, err := ch.Consume(
		q.Name, // 队列名
		"",     // 消费者标识
		false,  // 手动确认（关键防消息丢失）
		false,  // 排他性
		false,  // 非阻塞
		false,  // 额外属性
		nil,
	)
	if err != nil {
		log.Fatalf("消费者注册失败: %v", err)
	}

	forever := make(chan bool)
	go func() {
		for d := range msgs {
			log.Printf("收到消息: %s", d.Body)
			time.Sleep(time.Second) // 模拟耗时操作
			d.Ack(false)            // 手动确认
		}
	}()

	log.Printf(" [*] 等待消息，按 CTRL+C 退出")
	<-forever
}
